package com.ipartek.formacion.migracion.dao;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.formacion.ipartek.migracion.ddbb.TxtDAOFactory;
import com.formacion.ipartek.migracion.interfaces.InterfacePersonaDAO;
import com.ipartek.formacion.migracion.beans.Persona;
import com.ipartek.formacion.migracion.excepciones.PersonaException;

public class TxtPersonaDAO implements InterfacePersonaDAO {
	private static final Logger LOG = Logger.getLogger(TxtPersonaDAO.class);

	public TxtPersonaDAO() {

		PropertyConfigurator.configure("config/log4j.properties");
	}

	/**
	 * Metodo para anadir Persona
	 */
	@Override
	public boolean anadirPersona(Persona persona) {
		// No es necesario implementarlo para este caso
		return false;
	}

	/**
	 * Obtiene las personsa que hay dentro del ficheor txt
	 */
	@Override
	public ArrayList<Persona> getPersonas() {
		ArrayList<Persona> listaPersonas = new ArrayList<Persona>();
		int contPersonasOK = 0;
		int contPersonasNoOK = 0;
		try {
			BufferedReader br = new BufferedReader(new FileReader(
					TxtDAOFactory.conectar()));
			String[] linea;
			/*
			 * public Persona(String nombre, String apellido1, String
			 * apellido2,Integer edad, String email, String dni, String rol)
			 */
			while ((linea = br.readLine().split(",")) != null) {
				Persona p = new Persona();
				try {
					p = new Persona(linea[0], linea[1], linea[2],
							Integer.parseInt(linea[3]), linea[4], linea[5],
							linea[6]);
				} catch (PersonaException e) {
					LOG.error("Persona no insertada: " + e.getMensajeError());
					p = null;
				} catch (Exception e) {
					//
					LOG.error("Persona no insertada: " + e.getMessage());
					p = null;

				} finally {

					if (p != null) {
						listaPersonas.add(p);
						contPersonasOK++;
					} else {
						contPersonasNoOK++;
						continue;
					}
				}
			}
			br.close();

		} catch (FileNotFoundException e) {

			LOG.error(e.getMessage());
		} catch (IOException e) {
			//
			LOG.error(e.getMessage());
		} catch (Exception e) {
			//
			LOG.error(e.getMessage());

		} finally {
			if (contPersonasNoOK > 0) {
				LOG.info("La cantidad de personas que no contienen un formato correcto en el fichero de personas es: "
						+ contPersonasNoOK);

			}
			if (contPersonasOK > 0) {

				LOG.info("La cantidad de personas obtenidas del fichero de texto es: "
						+ contPersonasOK);
			}
			return listaPersonas;
		}

	}

	@Override
	public void commitar() {
		// TODO Auto-generated method stub

	}

	@Override
	public void conectar() {
		// TODO Auto-generated method stub

	}

}
